home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_SWIV.ZIP / SWIV 3D Assault.txt < prev    next >
Encoding:
Text File  |  1998-03-15  |  10.5 KB  |  241 lines

  1.  
  2. Free Information Xchange '98 presents:
  3.  
  4. SWIV 3D Assault - CD check crack by Static Vengeance
  5.  
  6. Requirements:
  7. Hex editor and full install
  8.  
  9.     SWIV is a 3D action shooter that's ok, it allows you to choose between six different
  10. types of vehicles to blast things with.  The 3Dfx version has great graphics and effects and
  11. even the other versions run well.  However there is a little problem with the game and that
  12. is it's copy protection.  And when I read this "** Special Note:  When playing SWIV 3D Assault,
  13. you must leave the CD-ROM in the drive.  Removal of the CD during gameplay will cause the copy
  14. protection to fail and your system may crash. **" in the readme.txt I said screw that!  I'll
  15. just remove it first.  So I go out W32Dasm and disassembled the glide (3Dfx) version of the
  16. game as that's the version I want to play.  I went up to the menu bar and selected "Refs"
  17. and went to 'String data references'  From there I grabbed the slider bar and scrolled down to
  18. "No CD-ROM!" and double clicked it.  Working backwards I had a crack in about 6 minutes.  This
  19. is what I started with, so follow along:
  20.  
  21. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  22. |:00424BC2(C)                                                      <-- Long conditional jump
  23. |
  24. * Possible StringData Ref from Data Obj ->"No CD-ROM!"             <-- String we're looking for
  25.                                   |
  26. :00426026 C7056C0D490024044900    mov dword ptr [00490D6C], 00490424
  27.  
  28. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  29. |:00426024(U)
  30. |
  31. :00426030 E873B30100              call 004413A8
  32.  
  33. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  34. |:00424BB4(C)
  35. |
  36. :00426035 E84A210000              call 00428184
  37.  
  38. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  39. |:00424BA7(C)
  40. |
  41. :0042603A E83D450300              call 0045A57C
  42.  
  43. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  44. |:00424B9A(C), :00424D07(C), :00424D28(C), :00424D61(C)
  45. |
  46. :0042603F 89EC                    mov esp, ebp
  47. :00426041 5D                      pop ebp
  48. :00426042 5F                      pop edi
  49. :00426043 5E                      pop esi
  50. :00426044 5A                      pop edx
  51. :00426045 59                      pop ecx
  52. :00426046 5B                      pop ebx
  53. :00426047 C3                      ret
  54.  
  55.     Looking at this section of code I really didn't seem to see how or what was
  56. leading the program to get to this point... That's becuase I had assumed that the
  57. conditional jump was more local then it turned out to be.  After taking a second
  58. look at the referring jump from 424BC2 I realized it came from a ways a way.  So
  59. we will have to check out that section of code and see what it does.
  60.  
  61.   -- Program Code--
  62. :00424B93 E80C590300              call 0045A4A4
  63. :00424B98 85C0                    test eax, eax
  64. :00424B9A 0F849F140000            je 0042603F
  65. :00424BA0 E867330000              call 00427F0C
  66. :00424BA5 85C0                    test eax, eax
  67. :00424BA7 0F848D140000            je 0042603A
  68. :00424BAD E8A2C70100              call 00441354
  69. :00424BB2 85C0                    test eax, eax
  70. :00424BB4 0F847B140000            je 00426035
  71. :00424BBA E8A1CEFEFF              call 00411A60            <-- CD check???
  72. :00424BBF 83F801                  cmp eax, 00000001        <-- Check result
  73. :00424BC2 0F855E140000            jne 00426026             <-- Jump to print "No CD-ROM!" routine
  74. :00424BC8 B8B80B0000              mov eax, 00000BB8
  75. :00424BCD E8C2270500              call 00477394
  76. :00424BD2 C745E446000000          mov [ebp-1C], 00000046
  77.   -- More Program Code --
  78.  
  79.     Seeing the conditional jump that leads to the No CD-ROM! section and the
  80. cmp eax comand, it stands to reason that the preceeding call is some type of CD
  81. check.  So let's check into it a bit to see what it does.
  82.  
  83. * Referenced by a CALL at Address:
  84. |:00424BBA   
  85. |
  86. :00411A60 53                      push ebx
  87. :00411A61 51                      push ecx
  88. :00411A62 52                      push edx
  89. :00411A63 56                      push esi
  90. :00411A64 57                      push edi
  91. :00411A65 55                      push ebp
  92. :00411A66 89E5                    mov ebp, esp
  93. :00411A68 81ECB4000000            sub esp, 000000B4
  94. :00411A6E 6A00                    push 00000000
  95. :00411A70 6A50                    push 00000050
  96. :00411A72 8D854CFFFFFF            lea eax, dword ptr [ebp+FFFFFF4C]
  97. :00411A78 50                      push eax
  98.  
  99. * Possible StringData Ref from Data Obj ->"status cdaudio length track 7"
  100.                                   |
  101. :00411A79 B8D4014900              mov eax, 004901D4
  102. :00411A7E 50                      push eax
  103.  
  104. * Reference To: WINMM.mciSendStringA, Ord:0004h              <-- Calls through WINMM.DLL
  105.                                   |
  106. :00411A7F 2EFF1590045E00          Call dword ptr cs:[005E0490]
  107. :00411A86 8D854CFFFFFF            lea eax, dword ptr [ebp+FFFFFF4C]
  108. :00411A8C E838B80600              call 0047D2C9
  109. :00411A91 8945EC                  mov dword ptr [ebp-14], eax
  110. :00411A94 6A00                    push 00000000
  111. :00411A96 6A50                    push 00000050
  112. :00411A98 8D854CFFFFFF            lea eax, dword ptr [ebp+FFFFFF4C]
  113. :00411A9E 50                      push eax
  114.  
  115. * Possible StringData Ref from Data Obj ->"status cdaudio length track 9"
  116.                                   |
  117. :00411A9F B8F4014900              mov eax, 004901F4
  118. :00411AA4 50                      push eax
  119.  
  120. * Reference To: WINMM.mciSendStringA, Ord:0004h
  121.                                   |
  122. :00411AA5 2EFF1590045E00          Call dword ptr cs:[005E0490]
  123. :00411AAC 8D854CFFFFFF            lea eax, dword ptr [ebp+FFFFFF4C]
  124. :00411AB2 E812B80600              call 0047D2C9
  125. :00411AB7 8945F0                  mov dword ptr [ebp-10], eax
  126. :00411ABA 6A00                    push 00000000
  127. :00411ABC 6A50                    push 00000050
  128. :00411ABE 8D854CFFFFFF            lea eax, dword ptr [ebp+FFFFFF4C]
  129. :00411AC4 50                      push eax
  130.  
  131. * Possible StringData Ref from Data Obj ->"status cdaudio length track 3"
  132.                                   |
  133. :00411AC5 B814024900              mov eax, 00490214
  134. :00411ACA 50                      push eax
  135.  
  136. * Reference To: WINMM.mciSendStringA, Ord:0004h
  137.                                   |
  138. :00411ACB 2EFF1590045E00          Call dword ptr cs:[005E0490]
  139. :00411AD2 8D854CFFFFFF            lea eax, dword ptr [ebp+FFFFFF4C]
  140. :00411AD8 E8ECB70600              call 0047D2C9
  141. :00411ADD 8945F4                  mov dword ptr [ebp-0C], eax
  142. :00411AE0 6A00                    push 00000000
  143. :00411AE2 6A50                    push 00000050
  144. :00411AE4 8D854CFFFFFF            lea eax, dword ptr [ebp+FFFFFF4C]
  145. :00411AEA 50                      push eax
  146.  
  147. * Possible StringData Ref from Data Obj ->"status cdaudio length track 5"
  148.                                   |
  149. :00411AEB B834024900              mov eax, 00490234
  150. :00411AF0 50                      push eax
  151.  
  152. * Reference To: WINMM.mciSendStringA, Ord:0004h
  153.                                   |
  154. :00411AF1 2EFF1590045E00          Call dword ptr cs:[005E0490]
  155. :00411AF8 8D854CFFFFFF            lea eax, dword ptr [ebp+FFFFFF4C]
  156. :00411AFE E8C6B70600              call 0047D2C9
  157. :00411B03 8945F8                  mov dword ptr [ebp-08], eax
  158. :00411B06 837DEC04                cmp dword ptr [ebp-14], 00000004
  159. :00411B0A 7506                    jne 00411B12
  160. :00411B0C 837DF00A                cmp dword ptr [ebp-10], 0000000A
  161. :00411B10 7402                    je 00411B14
  162.  
  163. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  164. |:00411B0A(C)
  165. |
  166. :00411B12 EB09                    jmp 00411B1D
  167.  
  168. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  169. |:00411B10(C)
  170. |
  171. :00411B14 C745FC01000000          mov [ebp-04], 00000001
  172. :00411B1B EB1E                    jmp 00411B3B
  173.  
  174. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  175. |:00411B12(U)
  176. |
  177. :00411B1D 837DF406                cmp dword ptr [ebp-0C], 00000006
  178. :00411B21 7506                    jne 00411B29
  179. :00411B23 837DF805                cmp dword ptr [ebp-08], 00000005
  180. :00411B27 7402                    je 00411B2B
  181.  
  182. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  183. |:00411B21(C)
  184. |
  185. :00411B29 EB09                    jmp 00411B34
  186.  
  187. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  188. |:00411B27(C)
  189. |
  190. :00411B2B C745FC01000000          mov [ebp-04], 00000001       <-- Remember the cmp eac,00000001?
  191. :00411B32 EB07                    jmp 00411B3B
  192.  
  193. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  194. |:00411B29(U)
  195. |
  196. :00411B34 C745FC00000000          mov [ebp-04], 00000000
  197.  
  198. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  199. |:00411B1B(U), :00411B32(U)
  200. |
  201. :00411B3B 8B45FC                  mov eax, dword ptr [ebp-04]   <-- How eax gets load with value
  202. :00411B3E 89EC                    mov esp, ebp
  203. :00411B40 5D                      pop ebp
  204. :00411B41 5F                      pop edi
  205. :00411B42 5E                      pop esi
  206. :00411B43 5A                      pop edx
  207. :00411B44 59                      pop ecx
  208. :00411B45 5B                      pop ebx
  209. :00411B46 C3                      ret
  210.  
  211.     So from this you can see that the game checks for the CD through a series of calls
  212. to WINMM (windows Multi-Media dll).  At the end of the routine there is a short section that
  213. returns with either a 00000000 or 00000001.  Ok, if we change the call to the above code to
  214. mov eax,00000001 then the game will think everything is fine and will continue on as if it
  215. had found the CD in the drive, which is what we want.  There are 4 diferent versions of
  216. SWIV 3D Assault out right now.  A windows version, a Win 3Dfx, a DOS versions and there is a
  217. version that was released on the net that is a Direct3D version.  I have provided the crack
  218. for all four versions:
  219.  
  220.  
  221. Edit each version of SWIV
  222. swiv_wfx.exe (3Dfx) at offset 85,946
  223. swiv_win.exe (win)  at offset 85,946
  224. swiv_wdx.exe (D3D)  at offset 85,418
  225. =============================
  226. Search for: E8 A1 CE FE FF
  227. Change to : B8 01 00 00 00
  228.  
  229. Edit swiv_dos.exe at offset 298,490
  230. ===================================
  231. Search for: E8 05 DC FE FF
  232. Change to : B8 01 00 00 00
  233.  
  234.     If the bytes are not there, then search for 83 F8 01 0F 85 5E 14 00 00, then when
  235. you find them, back up five (5) bytes and chagne the "E8 xx xx xx xx" to "B8 01 00 00 00"
  236. That will produce a cracked version of SWIV.  Funny, that each version including the DOS
  237. version had the same offset in the conditional jump.  Well that's it for SWIV 3D Assault!
  238. No more CD checks for this one becuase it's been FiX'ed
  239.  
  240. Static Vengeance
  241.